﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.IO;
using System.Windows.Media.Imaging;
using System.IO.IsolatedStorage;

namespace Can_I_Drive
{
    public partial class MainPage : PhoneApplicationPage
    {
        private int selectedItem = -1;//bevanda selezionato dalla lista
        private List<Bevanda> ListaBevande = new List<Bevanda>(); //lista vuota di bevande
        private bool male = false;
        private bool female = false;
        private bool low = false;
        private bool medium = false;
        private bool high = false;

        public MainPage()
        {
            InitializeComponent();

            //disabilito i bottoni
            ButtonMeno.IsEnabled = false;
            ButtonPiu.IsEnabled = false;
            ButtonOK.IsEnabled = false;

            //lettura file di testo e creazione lista bevande
            var resource = Application.GetResourceStream(new Uri("Bevande.txt", UriKind.Relative));
            StreamReader Reader = new StreamReader(resource.Stream);//file di testo
            string s = Reader.ReadLine();

            while (s != null)
            {
                //s = nome:grado:quantità 
                int index = s.IndexOf(":");
                string nome = s.Substring(0, s.Length - (s.Length - index));
                s = s.Substring(index + 1); //s = grado:quantita
                index = s.IndexOf(":");
                int grado = int.Parse(s.Substring(0, s.Length - (s.Length - index)));
                s = s.Substring(index + 1);//s = quantità
                int quantita = int.Parse(s);

                //creo la bevanda e l'aggiungo all'array
                ListaBevande.Add(new Bevanda(nome, grado, quantita));
                s = Reader.ReadLine();
            }

            Reader.Close();
            resource.Stream.Close();

            //crea listbox1 con la lista di bevande
            foreach (Bevanda b in ListaBevande)
            {
                listBox1.Items.Add("    " + b.getNome() + " " + b.getGrado() + "°");
            }

        }//PaginaDati

        private void eta_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            eta.Text = "";
        }//eta_Tap

        private void peso_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            peso.Text = "";
        }//peso_Tap

        private void altezza_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            altezza.Text = "";
        }//altezza_Tap

        private void calcola_Click(object sender, RoutedEventArgs e)
        {
            if ((!male && !female) || (!low && !medium && !high))//se non sono selezionati
                MessageBox.Show("Devi inserire i dati correttamente.");
            else
            {
                double height, weight, fw = 0, sommaAlc = 0, ta = 0.0;
                int age;

                //se i dati non vengono inseriti correttamente, lancia un errore
                try
                {
                    weight = double.Parse(peso.Text);
                    height = double.Parse(altezza.Text);
                    age = int.Parse(eta.Text);

                    if (male) //maschio
                    {
                        //fattore di Widmark 
                        if (low)
                            fw = 0.7;
                        if (medium)
                            fw = 0.95;
                        if (high)
                            fw = 1.2;
                    }
                    if (female) //femmina
                    {
                        //fattore di Widmark
                        if (low)
                            fw = 0.5;
                        if (medium)
                            fw = 0.7;
                        if (high)
                            fw = 0.9;
                    }

                    foreach (Bevanda b in ListaBevande)
                    {
                        //somma della quantità di alcool ingerita
                        sommaAlc = sommaAlc + (b.getPeso() * b.getSelez());//se la bevanda non è selezionata non interferisce con la somma
                    }

                    //Formula di Widmark
                    ta = (sommaAlc * 1.055) / (double)(weight * fw); //tasso alcolico in grammi per litro
                    ta = (double)((int)(ta * 100)) / 100;//taglio a due cifre decimali

                    //MessageBox.Show(ta.ToString());
                    if (ta <= 0.50)
                    {
                        NavigationService.Navigate(new Uri("/resOK.xaml?TA="+ta.ToString(), UriKind.Relative));//cambio della pagina
                    }
                    else
                    {
                        NavigationService.Navigate(new Uri("/resNonOk.xaml?TA="+ta.ToString(), UriKind.Relative));//cambio della pagina
                    }
                }

                catch
                {
                    //MOSTRA IL SEGUENTE MESSAGGIO SIA NEL CASO DI INSERIMENTO DI UN CARATTERE CHE NON SIA UN NUMERO, SIA NEL CASO IN CUI VENGA PASSATO ""
                    MessageBox.Show("Devi inserire i dati correttamente.");
                }
            }//else          
        }//calcola_Click

        private void ButtonPiu_Click(object sender, RoutedEventArgs e)
        {
            //aumento di uno il valore del textbox
            textBox1.Text = (int.Parse(textBox1.Text) + 1).ToString();
        }//ButtonPiu_Click

        private void ButtonMeno_Click(object sender, RoutedEventArgs e)
        {
            //diminuisco di uno il valore del textbox
            textBox1.Text = (int.Parse(textBox1.Text) - 1).ToString();
        }//ButtonMeno_Click

        private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            //se viene cambiato il valroe del textbox, abilito o disabilito il bottoneMeno
            //così da non avere numeri negativi
            if (int.Parse(textBox1.Text) <= 0)
            {
                ButtonMeno.IsEnabled = false;

                textBox1.Text = "0";
            }
            else
                ButtonMeno.IsEnabled = true;
        }//textBox1_TextChanged

        private void ButtonOK_Click(object sender, RoutedEventArgs e)
        {
            if (selectedItem > 0)//se è selezionata una bevanda
            {
                //uso l'indice della bevanda selezionata per aumentare il valore nella lista
                ListaBevande.ElementAt(selectedItem - 1).setSelez(int.Parse(textBox1.Text));
                selectedItem = -1;

                //cancello il listbox
                listBox1.Items.Clear();

                //crea listbox1
                foreach (Bevanda b in ListaBevande)
                {
                    int sel = b.getSelez();
                    if (sel == 0)
                        listBox1.Items.Add("    " + b.getNome() + " " + b.getGrado() + "°");
                    else
                    //compare il valore indicato dal textbox
                    {
                        if (sel >= 10)
                            listBox1.Items.Add(sel + " " + b.getNome() + " " + b.getGrado() + "°");
                        else
                            listBox1.Items.Add(sel + "  " + b.getNome() + " " + b.getGrado() + "°");
                    }

                }

                //disabilito i buttoni
                ButtonPiu.IsEnabled = false;
                ButtonOK.IsEnabled = false;
            }
            else
                MessageBox.Show("Seleziona una bevanda e una quantità.");
        }//ButtonOK_Click

        private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //estraggo l'indice della bevanda selezionata
            selectedItem = int.Parse(listBox1.SelectedIndex.ToString()) + 1;

            //abilito i bottoni per il cambio della quantità
            ButtonOK.IsEnabled = true;
            ButtonPiu.IsEnabled = true;

            //resetto il textbox
            textBox1.Text = "0";
        }

        private void buttonInfo_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/PaginaInfo.xaml", UriKind.Relative));//cambio della pagina
        }//buttonInfo_Click

        private void buttonRic_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/PaginaRiconoscimenti.xaml", UriKind.Relative));//cambio della pagina
        }//buttonR_Click

        private void maschio_Checked(object sender, RoutedEventArgs e)
        {
            male = true;
            female = false;
        }//maschio_Checked

        private void femmina_Checked(object sender, RoutedEventArgs e)
        {
            male = false;
            female = true;
        }//femmina_Checked

        private void niente_Checked(object sender, RoutedEventArgs e)
        {
            low = true;
            medium = false;
            high = false;
        }//niente_Checked

        private void poco_Checked(object sender, RoutedEventArgs e)
        {
            low = false;
            medium = true;
            high = false;
        }//poco_Checked

        private void abbastanza_Checked(object sender, RoutedEventArgs e)
        {
            low = false;
            medium = false;
            high = true;
        }//abbastanza_Checked
    }
}